package com.sxt.core.codc.impl;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import com.sxt.core.anno.AutoBuilder;
import com.sxt.core.codc.Codecer;
import com.sxt.core.util.ResourceUtil;

/**
 * jdk的序列化
 * jdk 的序列化     安全性高
 *             速度慢
 *             体积大
 *可以参考hession的序列化
 *              Kryo
 *              FST
 *可以使用Google Protobuf
 *           使用的非常多，性能和安全以及体积都做了优化
 *           大家写的时候，不使用jdk ，使用Protobuf 跨平台 java python c++ 学习大数据
 * @author WHSXT-LTD
 *
 */
@AutoBuilder
public class JDKCodecerImpl implements Codecer {

	@Override
	public byte[] code(Object object) {
		ByteArrayOutputStream byteArrayOutputStream = null ;
		ObjectOutputStream objectOutStream = null ;	
		byte[] bs = null ;
		try {
			byteArrayOutputStream = new ByteArrayOutputStream();
			objectOutStream = new ObjectOutputStream(byteArrayOutputStream);
			objectOutStream.writeObject(object); // 将对象写入到内存里面
			objectOutStream.flush();
			bs = byteArrayOutputStream.toByteArray();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			ResourceUtil.closes(objectOutStream,byteArrayOutputStream); // 关闭资源的操作
		}

		return bs;
	}

	@Override
	public Object deCode(byte[] bs) {
		ByteArrayInputStream byteArrayInputStream = null ;
		ObjectInputStream objectInputStream = null ;

		Object result = null ;
		try {
			byteArrayInputStream = new ByteArrayInputStream(bs);
			objectInputStream = new ObjectInputStream(byteArrayInputStream);
			result = objectInputStream.readObject();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			ResourceUtil.closes(objectInputStream,byteArrayInputStream); // 关闭资源
		}
		return result;
	}

}
